Bandwidth sharing

ABSTRACT

A method and system for bandwidth sharing to enable communication between users. A second key is received from a first user after the first user received the second key from a second user. A directive to transfer W upload bandwidth from the first user to the second user for a time duration is received. A first and second key was previously provided to the first and second user, configured to identify the first and second user, in conjunction with the first user and second user having an upload bandwidth of U 1  and U 2  for transmitting data, respectively. Responsive to the second key being received from the first user, the first and second user&#39;s upload bandwidth is changed to U 2 −W and U 1 +W, respectively. The specified data is transferred from the second user to the first user with a permitted upload bandwidth between U 2  and U 2 +W.

This application is a continuation application claiming priority to Ser.No. 16/050,537, filed Jul. 31, 2018, which is a continuation of Ser. No.15/848,106, filed Dec. 20, 2017, U.S. Pat. No. 10,122,652, issued Nov.6, 2018, which is a continuation of Ser. No. 14/838,933, filed Aug. 28,2015, U.S. Pat. No. 9,923,841, issued Mar. 20, 2018.

TECHNICAL FIELD

The invention relates to networking software and systems.

BACKGROUND

Insufficient bandwidth exists to perform tasks such as streaming,uploading files, VoIP, and other bandwidth intensive activities. Oftentimes you may visit a friend's or relative's house where they haveinternet access, but their current data plan they pay for does notprovide a sufficient upload or download rate to perform activities suchas watching Netflix or transferring large files. There's also the issueof attempting to stream data to someone else (such as voice overinternet protocol, twitch, screensharing, etc.), in which a user may nothave a sufficient upload or download rate (as limited by their internetservice provider's internet plan) to perform these activities.

SUMMARY

In general, examples disclosed herein are directed to techniques forbandwidth sharing. In one aspect, the techniques include providing afirst key to a first user, providing a second key to a second user,receiving the second key from the first user and, responsive toreceiving the second key from the first user, allocating an amount ofbandwidth normally allocated to the first user to the second user.

The allocated amount of bandwidth may be restricted to a set amount. Forexample, a time out value may be associated with the second key and theallocated amount of bandwidth may be bounded to the time out value. Theallocation may also be revoked. In another example, a computer systemfor bandwidth sharing includes one or more processors, one or morecomputer-readable memories, and one or more computer-readable, tangiblestorage devices. The system further include program instructions storedon at least one of the one or more storage devices for execution by atleast one of the one or more processors via at least one of the one ormore memories, to provide a first key to a first user, provide a secondkey to a second user, receive the second key from the first user and,responsive to receiving the second key from the first user, allocate anamount of bandwidth normally allocated to the first user to the seconduser.

In another example, a computer program product includes acomputer-readable storage medium has program code embodied therewith.The program code is executable by a computing device to provide a firstkey to a first user, provide a second key to a second user, receive thesecond key from the first user and, responsive to receiving the secondkey from the first user, allocate an amount of bandwidth normallyallocated to the first user to the second user.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1 is a block diagram illustrating a computing environment forbandwidth sharing.

FIG. 2 is a flow diagram illustrating a method for bandwidth sharing.

FIG. 3 is a block diagram of a computing device for bandwidth sharing.

DETAILED DESCRIPTION

Various examples are disclosed herein for bandwidth sharing. Many formsof bandwidth management exist. However, the issue comes in that you mustbe in control of whatever device is allocating bandwidth. This is notthe case with modern homes in which customers purchase bandwidthallocation from an ISP (internet service provider). Once a customer hasa plan, they are tied to a specific bandwidth allocation unless they payfor an upgrade (which in some cases would only take effect at the end ofthe month), which they may only need temporarily. This setup also canalso hinder others working with each other (e.g. streaming, screensharing, file transfers) as there is not a way to fix your peer's slowinternet connection, which may make screen sharing or VoIP unpleasantfor other users.

One workaround is illustrated in the following example. Suppose Bob andAlice are friends. They both are internet users and as such havepurchased an internet plan from their respective internet provider. Uponpurchase the ISP has created a new entry in their database to mark thatBob has data plan X. Similarly, an ISP has an entry in their database tomark that Alice has data plan Y.

Each ISP then gives Bob and Alice their own unique key that they canpass out. The ISP's will be able to parse the key and identify thecorrect company to communicate with (if necessary).

-   -   Bob's key may look something like this:    -   TWC:bob@bob.com    -   While Alice's may look something like this    -   TWC:alice@alice.com

Bob and Alice wish to have a skype session. However, Alice does not havethe bandwidth requirements for a video call, so Bob is willing to sharehis bandwidth. Alice first gives Bob her key (TWC:alice@alice.com). Bobthen goes to his ISP's control panel. He enters in Alice's key and marksthat he wishes to give her some W upload and Z download. Where both Wand Z are less than his data plans maximum amount for upload anddownload rate. He also marks that he only wishes this to last N hours.The control panel then takes care of the rest in terms of submitting hisrequest to give Alice more bandwidth. The control panel possibly makes aREST call to the back-end server that may look like:TWC:bob@bob.com:TWC:alice@alice.com:W/Z:Nh. Upon receiving this request,the ISP REDUCES Bob's upload by W and download by Z. It then INCREASESAlice's upload by W and download by Z. This change will only last for Nhours, where W,Z, and N are all numbers.

As illustrated in the above example, in one embodiment, end users in anISP's database will have some unique key that they are able to give outand share. Some other end user can use this key to temporarily assign aportion of his allocated bandwidth (purchased from an ISP) to anotheruser (and revoke at will). This would allow users to dynamically giveand receive boosts to their bandwidth without having to be in control ofa router or upgrading someone else's (or their own) internet plan.

In another example case, your friend is trying to stream his desktop (ora game via Twitch.tv), but because of the internet plan he purchasedfrom his ISP, he only has a download rate of 5 Mbps and an upload rateof 0.5 Mbps, which is not sufficient for streaming his desktop to you.You on the other hand, have a download rate of 60 Mbps and an uploadrate of 10 Mbps so you would be able to easily stream; however, you arenot your friend. If this system were implemented, you would be able totemporarily donate a portion of your upload rate to your friend. Forinstance, you could donate 8 Mbps of your upload rate to him. This wouldleave you with 2 Mbps and your friend with 8.5 Mbps, enough for him tostream his desktop to you.

In another example, you, the system user, has the ability to take yourpurchased data plan with you wherever you went (assuming you hadinternet access and local hardware that supported it). If you've paidfor a 60/5 down/upload plan, but have gone to your mother's house (or tosome internet cafe) who only has the 5/0.5 plan, you would strugglewatching movies on Netflix. With this you would be able to assign yourbandwidth to your mother's home and would be able to use the data planyou purchased to download and watch movies much faster.

In another case scenario involving a large corporation, when a userupload's a video, it may take several minutes to upload a high qualityvideo, and the upload time only gets worse as the videos become longer.In one implementation, the large corporation has the user's key and ISPon file (registered by the user). Then when the large corporationnotices they're uploading a file, they could temporarily give them alarge upload boost until the file upload is complete, reducing theupload time significantly (this is assuming that the large corporationhas spare resources for such things and would be economical to donate afew seconds of their bandwidth to users uploading videos).

FIG. 1 is a block diagram illustrating one embodiment of a system forbandwidth sharing. The system 100 includes an internet service provider110. The system utilizes the ISP's existing bandwidth managementsolutions, and makes them more dynamic and controllable by theircustomers and letting the customer inform the ISP how/where they wanttheir bandwidth allocated. By default an ISP will allocate thecustomer's purchased internet service plan 120 to a specific end home(or business) network 130.

In one implementation, User 1 makes a request to his ISP 100 to allocatex of his upload or download to user 2. The ISP 100 receives the requestand modifies a table in their database specifying how much of thebandwidth should be taken from user 1 and given to user 2. The ISP 100then uses whatever system they're using for bandwidth management andincreases user 2's bandwidth by the specified amount.

User 2 may then be notified (if the ISP's system supports it), and willbe able to use their internet service as if they had their originalbandwidth allocation in addition to the x amount provided from user 1.User 1 and User 2 may be the same person, but could be differentlocations. User 1 may then revoke the donated bandwidth at any time bymaking another request, or setting a timer.

When the bandwidth is revoked, the ISP 100 will undo the changesaccordingly and user 2 will be restricted to their original bandwidthallocation once again.

Requests may be made in many different ways including a GUI on aninternet page (such as a customer control panel), a text message, aphone call to customer service, or any other messaging serviceavailable.

As shown in FIG. 2, one implementation of a method for dynamic bandwidthsharing includes providing a first key to a first user (210), providinga second key to a second user (220) receiving the second key from thefirst user (230) and, responsive to receiving the second key from thefirst user, allocating an amount of bandwidth normally allocated to thefirst user to the second user (240).

The allocated amount of bandwidth may be restricted to a set amount. Forexample, a time out value may be associated with the second key and theallocated amount of bandwidth may be bounded to the time out value. Theallocation may also be revoked. FIG. 3 is a block diagram of a computingdevice 80 that may be used to execute a bandwidth sharing program,according to an illustrative example. Computing device 80 may be aserver such as a web server or application server. Computing device 80may also be a virtual server that may be run from or incorporate anynumber of computing devices. A computing device may operate as all orpart of a real or virtual server, and may be or incorporate aworkstation, server, mainframe computer, notebook or laptop computer,desktop computer, tablet, smartphone, feature phone, or otherprogrammable data processing apparatus of any kind. Otherimplementations of a computing device 80 may include a computer havingcapabilities or formats other than or beyond those described herein.

In the illustrative example of FIG. 3, computing device 80 includescommunications fabric 82, which provides communications betweenprocessor unit 84, memory 86, persistent data storage 88, communicationsunit 90, and input/output (I/O) unit 92. Communications fabric 82 mayinclude a dedicated system bus, a general system bus, multiple busesarranged in hierarchical form, any other type of bus, bus network,switch fabric, or other interconnection technology. Communicationsfabric 82 supports transfer of data, commands, and other informationbetween various subsystems of computing device 80.

Processor unit 84 may be a programmable central processing unit (CPU)configured for executing programmed instructions stored in memory 86. Inanother illustrative example, processor unit 84 may be implemented usingone or more heterogeneous processor systems in which a main processor ispresent with secondary processors on a single chip. In yet anotherillustrative example, processor unit 84 may be a symmetricmulti-processor system containing multiple processors of the same type.Processor unit 84 may be a reduced instruction set computing (RISC)microprocessor such as a PowerPC® processor from IBM® Corporation, anx86 compatible processor such as a Pentium® processor from Intel®Corporation, an Athlon® processor from Advanced Micro Devices®Corporation, or any other suitable processor. In various examples,processor unit 84 may include a multi-core processor, such as a dualcore or quad core processor, for example. Processor unit 84 may includemultiple processing chips on one die, and/or multiple dies on onepackage or substrate, for example. Processor unit 84 may also includeone or more levels of integrated cache memory, for example. In variousexamples, processor unit 84 may comprise one or more CPUs distributedacross one or more locations. Data storage 96 includes memory 86 andpersistent data storage 88, which are in communication with processorunit 84 through communications fabric 82. Memory 86 can include a randomaccess semiconductor memory (RAM) for storing application data, i.e.,computer program data, for processing. While memory 86 is depictedconceptually as a single monolithic entity, in various examples, memory86 may be arranged in a hierarchy of caches and in other memory devices,in a single physical location, or distributed across a plurality ofphysical systems in various forms. While memory 86 is depictedphysically separated from processor unit 84 and other elements ofcomputing device 80, memory 86 may refer equivalently to anyintermediate or cache memory at any location throughout computing device80, including cache memory proximate to or integrated with processorunit 84 or individual cores of processor unit 84.

Persistent data storage 88 may include one or more hard disc drives,solid state drives, flash drives, rewritable optical disc drives,magnetic tape drives, or any combination of these or other data storagemedia. Persistent data storage 88 may store computer-executableinstructions or computer-readable program code for an operating system,application files comprising program code, data structures or datafiles, and any other type of data. These computer-executableinstructions may be loaded from persistent data storage 88 into memory86 to be read and executed by processor unit 84 or other processors.Data storage 96 may also include any other hardware elements capable ofstoring information, such as, for example and without limitation, data,program code in functional form, and/or other suitable information,either on a temporary basis and/or a permanent basis.

Persistent data storage 88 and memory 86 are examples of physical,tangible, non-transitory computer-readable data storage devices. Someexamples may use such a non-transitory medium. Data storage 96 mayinclude any of various forms of volatile memory that may require beingperiodically electrically refreshed to maintain data in memory, whilethose skilled in the art will recognize that this also constitutes anexample of a physical, tangible, non-transitory computer-readable datastorage device. Executable instructions may be stored on anon-transitory medium when program code is loaded, stored, relayed,buffered, or cached on a non-transitory physical medium or device,including if only for only a short duration or only in a volatile memoryformat.

Processor unit 84 can also be suitably programmed to read, load, andexecute computer-executable instructions or computer-readable programcode for a semantic model constructor 22, as described in greater detailabove. This program code may be stored on memory 86, persistent datastorage 88, or elsewhere in computing device 80. This program code mayalso take the form of program code 104 stored on computer-readablemedium 102 comprised in computer program product 100, and may betransferred or communicated, through any of a variety of local or remotemeans, from computer program product 100 to computing device 80 to beenabled to be executed by processor unit 84, as further explained below.

The operating system may provide functions such as device interfacemanagement, memory management, and multiple task management. Theoperating system can be a Unix based operating system such as the AIX®operating system from IBM® Corporation, a non-Unix based operatingsystem such as the Windows® family of operating systems from Microsoft®Corporation, a network operating system such as JavaOS® from Oracle®Corporation, or any other suitable operating system. Processor unit 84can be suitably programmed to read, load, and execute instructions ofthe operating system.

Communications unit 90, in this example, provides for communicationswith other computing or communications systems or devices.Communications unit 90 may provide communications through the use ofphysical and/or wireless communications links. Communications unit 90may include a network interface card for interfacing with a LAN 16, anEthernet adapter, a Token Ring adapter, a modem for connecting to atransmission system such as a telephone line, or any other type ofcommunication interface. Communications unit 90 can be used foroperationally connecting many types of peripheral computing devices tocomputing device 80, such as printers, bus adapters, and othercomputers. Communications unit 90 may be implemented as an expansioncard or be built into a motherboard, for example.

The input/output unit 92 can support devices suited for input and outputof data with other devices that may be connected to computing device 80,such as keyboard, a mouse or other pointer, a touchscreen interface, aninterface for a printer or any other peripheral device, a removablemagnetic or optical disc drive (including CD-ROM, DVD-ROM, or Blu-Ray),a universal serial bus (USB) receptacle, or any other type of inputand/or output device. Input/output unit 92 may also include any type ofinterface for video output in any type of video output protocol and anytype of monitor or other video display technology, in various examples.It will be understood that some of these examples may overlap with eachother, or with example components of communications unit 90 or datastorage 96. Input/output unit 92 may also include appropriate devicedrivers for any type of external device, or such device drivers mayreside elsewhere on computing device 80 as appropriate.

Computing device 80 also includes a display adapter 94 in thisillustrative example, which provides one or more connections for one ormore display devices, such as display device 98, which may include anyof a variety of types of display devices. It will be understood thatsome of these examples may overlap with example components ofcommunications unit 90 or input/output unit 92. Input/output unit 92 mayalso include appropriate device drivers for any type of external device,or such device drivers may reside elsewhere on computing device 80 asappropriate. Display adapter 94 may include one or more video cards, oneor more graphics processing units (GPUs), one or more video-capableconnection ports, or any other type of data connector capable ofcommunicating video data, in various examples. Display device 98 may beany kind of video display device, such as a monitor, a television, or aprojector, in various examples. Input/output unit 92 may include adrive, socket, or outlet for receiving computer program product 100,which comprises a computer-readable medium 102 having computer programcode 104 stored thereon. For example, computer program product 100 maybe a CD-ROM, a DVD-ROM, a Blu-Ray disc, a magnetic disc, a USB stick, aflash drive, or an external hard disc drive, as illustrative examples,or any other suitable data storage technology.

Computer-readable medium 102 may include any type of optical, magnetic,or other physical medium that physically encodes program code 104 as abinary series of different physical states in each unit of memory that,when read by computing device 80, induces a physical signal that is readby processor 84 that corresponds to the physical states of the basicdata storage elements of storage medium 102, and that inducescorresponding changes in the physical state of processor unit 84. Thatphysical program code signal may be modeled or conceptualized ascomputer-readable instructions at any of various levels of abstraction,such as a high-level programming language, assembly language, or machinelanguage, but ultimately constitutes a series of physical electricaland/or magnetic interactions that physically induce a change in thephysical state of processor unit 84, thereby physically causing orconfiguring processor unit 84 to generate physical outputs thatcorrespond to the computer-executable instructions, in a way that causescomputing device 80 to physically assume new capabilities that it didnot have until its physical state was changed by loading the executableinstructions comprised in program code 104.

In some illustrative examples, program code 104 may be downloaded over anetwork to data storage 96 from another device or computer system foruse within computing device 80. Program code 104 comprisingcomputer-executable instructions may be communicated or transferred tocomputing device 80 from computer-readable medium 102 through ahard-line or wireless communications link to communications unit 90and/or through a connection to input/output unit 92. Computer-readablemedium 102 comprising program code 104 may be located at a separate orremote location from computing device 80, and may be located anywhere,including at any remote geographical location anywhere in the world, andmay relay program code 104 to computing device 80 over any type of oneor more communication links, such as the Internet and/or other packetdata networks. The program code 104 may be transmitted over a wirelessInternet connection, or over a shorter-range direct wireless connectionsuch as wireless LAN, Bluetooth™, Wi-Fi™, or an infrared connection, forexample. Any other wireless or remote communication protocol may also beused in other implementations.

The communications link and/or the connection may include wired and/orwireless connections in various illustrative examples, and program code104 may be transmitted from a source computer-readable medium 102 overnon-tangible media, such as communications links or wirelesstransmissions containing the program code 104. Program code 104 may bemore or less temporarily or durably stored on any number of intermediatetangible, physical computer-readable devices and media, such as anynumber of physical buffers, caches, main memory, or data storagecomponents of servers, gateways, network nodes, mobility managemententities, or other network assets, en route from its original sourcemedium to computing device 80.

The present invention may be a system, a method, and/or a computerprogram product. The computer program product may include a computerreadable storage medium (or media) having computer readable programinstructions thereon for causing a processor to carry out aspects of thepresent invention. The computer readable storage medium can be atangible device that can retain and store instructions for use by aninstruction execution device. The computer readable storage medium maybe, for example, but is not limited to, an electronic storage device, amagnetic storage device, an optical storage device, an electromagneticstorage device, a semiconductor storage device, or any suitablecombination of the foregoing. A non-exhaustive list of more specificexamples of the computer readable storage medium includes the following:a portable computer diskette, a hard disk, a random access memory (RAM),a read-only memory (ROM), an erasable programmable read-only memory(EPROM or Flash memory), a static random access memory (SRAM), aportable compact disc read-only memory (CD-ROM), a digital versatiledisk (DVD), a memory stick, a floppy disk, a mechanically encoded devicesuch as punch-cards or raised structures in a groove having instructionsrecorded thereon, and any suitable combination of the foregoing. Acomputer readable storage medium, as used herein, is not to be construedas being transitory signals per se, such as radio waves or other freelypropagating electromagnetic waves, electromagnetic waves propagatingthrough a waveguide or other transmission media (e.g., light pulsespassing through a fiber-optic cable), or electrical signals transmittedthrough a wire. Computer readable program instructions described hereincan be downloaded to respective computing/processing devices from acomputer readable storage medium or to an external computer or externalstorage device via a network, for example, the Internet, a local areanetwork, a wide area network and/or a wireless network. The network maycomprise copper transmission cables, optical transmission fibers,wireless transmission, routers, firewalls, switches, gateway computersand/or edge servers. A network adapter card or network interface in eachcomputing/processing device receives computer readable programinstructions from the network and forwards the computer readable programinstructions for storage in a computer readable storage medium withinthe respective computing/processing device. Computer readable programinstructions for carrying out operations of the present invention may beassembler instructions, instruction-set-architecture (ISA) instructions,machine instructions, machine dependent instructions, microcode,firmware instructions, state-setting data, or either source code orobject code written in any combination of one or more programminglanguages, including an object oriented programming language such asSmalltalk, C++ or the like, and conventional procedural programminglanguages, such as the “C” programming language or similar programminglanguages. The computer readable program instructions may executeentirely on the user's computer, partly on the user's computer, as astand-alone software package, partly on the user's computer and partlyon a remote computer or entirely on the remote computer or server. Inthe latter scenario, the remote computer may be connected to the user'scomputer through any type of network, including a local area network(LAN) or a wide area network (WAN), or the connection may be made to anexternal computer (for example, through the Internet using an InternetService Provider). In some embodiments, electronic circuitry including,for example, programmable logic circuitry, field-programmable gatearrays (FPGA), or programmable logic arrays (PLA) may execute thecomputer readable program instructions by utilizing state information ofthe computer readable program instructions to personalize the electroniccircuitry, in order to perform aspects of the present invention. Aspectsof the present invention are described herein with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems), and computer program products according to embodiments of IBMCONFIDENTIAL D-2 the invention. It will be understood that each block ofthe flowchart illustrations and/or block diagrams, and combinations ofblocks in the flowchart illustrations and/or block diagrams, can beimplemented by computer readable program instructions. These computerreadable program instructions may be provided to a processor of ageneral purpose computer, special purpose computer, or otherprogrammable data processing apparatus to produce a machine, such thatthe instructions, which execute via the processor of the computer orother programmable data processing apparatus, create means forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks. These computer readable program instructionsmay also be stored in a computer readable storage medium that can directa computer, a programmable data processing apparatus, and/or otherdevices to function in a particular manner, such that the computerreadable storage medium having instructions stored therein comprises anarticle of manufacture including instructions which implement aspects ofthe function/act specified in the flowchart and/or block diagram blockor blocks. The computer readable program instructions may also be loadedonto a computer, other programmable data processing apparatus, or otherdevice to cause a series of operational steps to be performed on thecomputer, other programmable apparatus or other device to produce acomputer implemented process, such that the instructions which executeon the computer, other programmable apparatus, or other device implementthe functions/acts specified in the flowchart and/or block diagram blockor blocks. The flowchart and block diagrams in the Figures illustratethe architecture, functionality, and operation of possibleimplementations of systems, methods, and computer program productsaccording to various embodiments of the present invention. In thisregard, each block in the flowchart or block diagrams may represent amodule, segment, or portion of instructions, which comprises one or moreexecutable instructions for implementing the specified logicalfunction(s). In some alternative implementations, the functions noted inthe block may occur out of the order noted in the figures. For example,two blocks shown in succession may, in fact, be executed substantiallyconcurrently, or the blocks may sometimes be executed in the reverseorder, depending upon the functionality involved. It will also be notedthat each block of the block diagrams and/or flowchart illustration, andcombinations of blocks in the block diagrams and/or flowchartillustration, can be implemented by special purpose hardware-basedsystems that perform the specified functions or acts or carry outcombinations of special purpose hardware and computer instructions.

What is claimed is:
 1. A method for bandwidth sharing to enablecommunication between users, said method comprising: receiving, by anInternet Service Provider (ISP) from a first user after the first userreceived a second key from a second user: the second key and a directiveto transfer W upload bandwidth from the first user to the second userfor a finite time duration N, wherein the ISP previously provided afirst key to the first user in conjunction with a first plan in whichthe first user purchased from the ISP an upload bandwidth of U1 fortransmitting data via the Internet and a download bandwidth of D1 forreceiving data via the Internet, wherein the first key is configured toidentify the first user, wherein the ISP previously provided the secondkey to the second user in conjunction with a second plan in which thesecond user purchased from the ISP an upload bandwidth of U2 fortransmitting data via the Internet and a download bandwidth of D2 forreceiving data via the Internet, and wherein the second key isconfigured to identify the second user; responsive to said receiving thesecond key from the first user, changing bandwidth, by the ISP for thetime duration N, wherein said changing bandwidth comprises changing thesecond user's upload bandwidth to U2+W and changing the first user'supload bandwidth to U1−W, wherein W is an additional upload bandwidth,and wherein communication between the second user and the first userrequires a permitted upload bandwidth greater than U2 and less thanU2+W; and responsive to receiving, by the ISP from the second userwithin the time duration N, a directive to establish a communicationbetween the second user and the first user to transfer specified data,transferring, by the ISP during the time duration N in accordance withthe permitted upload bandwidth, the specified data from the second userto the first user.
 2. The method of claim 1, wherein U2 differs from U1and D2 differs from D1.
 3. The method of claim 1, wherein the bandwidthto be transferred further comprises Z download bandwidth, and whereinsaid changing bandwidth further comprises changing the second user'sdownload bandwidth to D2+Z and changing first user's download bandwidthto D1−Z.
 4. The method of claim 3, wherein W is unequal to Z.
 5. Themethod of claim 1, wherein said receiving the second key from the firstuser includes receiving a request from the first user through agraphical user interface.
 6. The method of claim 1, wherein saidreceiving the second key from the first user includes receiving arequest from the first user through a cellular phone network.
 7. Acomputer program product, comprising one or more computer readablehardware storage devices containing computer readable program code thatwhen executed by one or more processors of a computer system implementsa method for bandwidth sharing to enable communication between users,said method comprising: receiving, by an Internet Service Provider (ISP)from a first user after the first user received a second key from asecond user: the second key and a directive to transfer W uploadbandwidth from the first user to the second user for a finite timeduration N, wherein the ISP previously provided a first key to the firstuser in conjunction with a first plan in which the first user purchasedfrom the ISP an upload bandwidth of U1 for transmitting data via theInternet and a download bandwidth of D1 for receiving data via theInternet, wherein the first key is configured to identify the firstuser, wherein the ISP previously provided the second key to the seconduser in conjunction with a second plan in which the second userpurchased from the ISP an upload bandwidth of U2 for transmitting datavia the Internet and a download bandwidth of D2 for receiving data viathe Internet, and wherein the second key is configured to identify thesecond user; responsive to said receiving the second key from the firstuser, changing bandwidth, by the ISP for the time duration N, whereinsaid changing bandwidth comprises changing the second user's uploadbandwidth to U2+W and changing the first user's upload bandwidth toU1−W, wherein W is an additional upload bandwidth, and whereincommunication between the second user and the first user requires apermitted upload bandwidth greater than U2 and less than U2+W; andresponsive to receiving, by the ISP from the second user within the timeduration N, a directive to establish a communication between the seconduser and the first user to transfer specified data, transferring, by theISP during the time duration N in accordance with the permitted uploadbandwidth, the specified data from the second user to the first user. 8.The computer program product of claim 7, wherein U2 differs from U1 andD2 differs from D1.
 9. The computer program product of claim 7, whereinthe bandwidth to be transferred further comprises Z download bandwidth,and wherein said changing bandwidth further comprises changing thesecond user's download bandwidth to D2+Z and changing first user'sdownload bandwidth to D1−Z.
 10. The computer program product of claim 9,wherein W is unequal to Z.
 11. The computer program product of claim 7,wherein said receiving the second key from the first user includesreceiving a request from the first user through a graphical userinterface.
 12. The computer program product of claim 7, wherein saidreceiving the second key from the first user includes receiving arequest from the first user through a cellular phone network.
 13. Acomputer system, comprising: one or more processors; one or morememories; and one or more computer readable hardware storage devicescontaining computer readable program code that when executed by the oneor more processors via the one or more memories implements a method forbandwidth sharing to enable communication between users, said methodcomprising: receiving, by an Internet Service Provider (ISP) from afirst user after the first user received a second key from a seconduser: the second key and a directive to transfer W upload bandwidth fromthe first user to the second user for a finite time duration N, whereinthe ISP previously provided a first key to the first user in conjunctionwith a first plan in which the first user purchased from the ISP anupload bandwidth of U1 for transmitting data via the Internet and adownload bandwidth of D1 for receiving data via the Internet, whereinthe first key is configured to identify the first user, wherein the ISPpreviously provided the second key to the second user in conjunctionwith a second plan in which the second user purchased from the ISP anupload bandwidth of U2 for transmitting data via the Internet and adownload bandwidth of D2 for receiving data via the Internet, andwherein the second key is configured to identify the second user;responsive to said receiving the second key from the first user,changing bandwidth, by the ISP for the time duration N, wherein saidchanging bandwidth comprises changing the second user's upload bandwidthto U2+W and changing the first user's upload bandwidth to U1−W, whereinW is an additional upload bandwidth, and wherein communication betweenthe second user and the first user requires a permitted upload bandwidthgreater than U2 and less than U2+W; and responsive to receiving, by theISP from the second user within the time duration N, a directive toestablish a communication between the second user and the first user totransfer specified data, transferring, by the ISP during the timeduration N in accordance with the permitted upload bandwidth, thespecified data from the second user to the first user.
 14. The computersystem of claim 13, wherein U2 differs from U1 and D2 differs from D1.15. The computer system of claim 13, wherein the bandwidth to betransferred further comprises Z download bandwidth, and wherein saidchanging bandwidth further comprises changing the second user's downloadbandwidth to D2+Z and changing first user's download bandwidth to D1−Z.16. The computer system of claim 15, wherein W is unequal to Z.
 17. Thecomputer system of claim 13, wherein said receiving the second key fromthe first user includes receiving a request from the first user througha graphical user interface.
 18. The computer system of claim 13, whereinsaid receiving the second key from the first user includes receiving arequest from the first user through a cellular phone network.